home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Reference Guide
/
C-C++ Interactive Reference Guide.iso
/
c_ref
/
csource5
/
306_01
/
thread.h
< prev
next >
Wrap
C/C++ Source or Header
|
1989-12-13
|
2KB
|
34 lines
/*********** THREAD.H COPYRIGHT 1989 GREGORY COLVIN ************
This program may be distributed free with this copyright notice.
***************************************************************/
#include <setjmp.h> /* defines jmp_buf */
#include <assert.h> /* defines assert */
#include <stdio.h> /* defines stderr for assert */
#include <stdlib.h> /* defines abort for assert */
typedef int Thread; /* index into thread table */
typedef struct {
jmp_buf init; /* state of thread for init */
jmp_buf jump; /* state of thread for jump */
char *stack; /* top of stack for thread */
Thread free; /* next thread on free list */
} *ThTabl;
extern ThTabl Threads; /* table of threads */
extern Thread ThCurr; /* current thread */
int ThInit(int n,int size); /* create n size byte threads */
Thread ThNew(void(*f)(Thread)); /* fork and exec new thread */
Thread ThNext(void); /* find next runnable thread */
Thread ThJump(Thread id); /* jump to another thread */
void ThExit(Thread id); /* exit to another thread */
void ThFree(void); /* free the thread table */
#define ThProbe() /* don't blow your stack */\
{ char p; \
assert(Threads[ThCurr].stack < &p); \
}
#define ThId() /* identify yourself */\
ThCurr
#define ThLive(id) /* is this thread alive? */\
!Threads[(id)].free